package xrate

// 获取批次奖品列表
//
//	id	批次ID
//	uid	用户ID
func RateBatchUser(id, uid uint) (*Project, error) {
	// 获取要抽奖的rate列表
	p_list, err := RateBatch(id)
	if err != nil {
		return nil, err
	}
	info, err := BatchInfo(id)
	if err != nil {
		return nil, err
	}
	// 产品保底
	if info.Guarantee > 0 {
		// 存在指定产品保底的话
		// 查询本产品抽中了多少次
		count := UserCount(uid, id, info.GuaranteeId, 0)
		if count >= info.Guarantee {
			return ProjectInfo(info.GuaranteeId)
		}
	}
	// 星级保底
	choujiang := []RateWain{}
	start_cache := map[uint]uint{}
	// 距离星级保底的次数
	for i := 0; i < len(p_list); i++ {
		if p_list[i].StartCount > 0 {
			// 如果设置有星级保底的话
			// 查看当前抽了多少次
			if _, ok := start_cache[p_list[i].StartId]; !ok {
				start_cache[p_list[i].StartId] = UserCount(uid, id, 0, p_list[i].StartId)
			}
			if start_cache[p_list[i].StartId] >= p_list[i].StartCount {
				// 必中该星级的奖品
				choujiang = append(choujiang, p_list[i])
			}
		}
	}
	if len(choujiang) > 0 {
		ind := RateWinning(choujiang)
		return ProjectInfo(choujiang[ind].ID)
	}
	ind := RateWinning(p_list)
	return ProjectInfo(p_list[ind].ID)
}
